/**********************************************************************************************************************
 *
 * Project:    mGameEngine
 * File:       keycode.h
 * Author:     karooolek
 * Created on: 2009-01-05
 *
 **********************************************************************************************************************/

#ifndef KEYCODE_H_
#define KEYCODE_H_

namespace mGameEngine
{
namespace Input
{

/**
 * Keyboard key codes identifiers.
 * Most characters can be identified by their ASCII code
 * and they're not defined here!
 * Special keys codes are defined here.
 */
enum KeyCode
{
    KEY_CODE_NONE = 0,        ///< None key

    KEY_CODE_1 = '1',        ///< 1 key
    KEY_CODE_2,                ///< 2 key
    KEY_CODE_3,                ///< 3 key
    KEY_CODE_4,                ///< 4 key
    KEY_CODE_5,                ///< 5 key
    KEY_CODE_6,                ///< 6 key
    KEY_CODE_7,                ///< 7 key
    KEY_CODE_8,                ///< 8 key
    KEY_CODE_9,                ///< 9 key
    KEY_CODE_0 = '0',        ///< 0 key

    KEY_CODE_A = 'a',        ///< A key
    KEY_CODE_B,                ///< B key
    KEY_CODE_C,                ///< C key
    KEY_CODE_D,                ///< D key
    KEY_CODE_E,                ///< E key
    KEY_CODE_F,                ///< F key
    KEY_CODE_G,                ///< G key
    KEY_CODE_H,                ///< H key
    KEY_CODE_I,                ///< I key
    KEY_CODE_J,                ///< J key
    KEY_CODE_K,                ///< K key
    KEY_CODE_L,                ///< L key
    KEY_CODE_M,                ///< M key
    KEY_CODE_N,                ///< N key
    KEY_CODE_O,                ///< O key
    KEY_CODE_P,                ///< P key
    KEY_CODE_Q,                ///< Q key
    KEY_CODE_R,                ///< R key
    KEY_CODE_S,                ///< S key
    KEY_CODE_T,                ///< T key
    KEY_CODE_U,                ///< U key
    KEY_CODE_V,                ///< V key
    KEY_CODE_W,                ///< W key
    KEY_CODE_X,                ///< X key
    KEY_CODE_Y,                ///< Y key
    KEY_CODE_Z,                ///< Z key

    KEY_CODE_MINUS = '-',    ///< Minus key code
    KEY_CODE_PLUS = '+',     ///< Plus key code
    KEY_CODE_ASTERISK = '*',///< Asterisk key code
    KEY_CODE_EQUALS = '=',    ///< Equals key code
    KEY_CODE_COMMA = ',',    ///< Comma key code
    KEY_CODE_DOT = '.',     ///< Dot key code
    KEY_CODE_SLASH = '/',    ///< Slash key code
    KEY_CODE_BACKSLASH = '\\',    ///< Backslash key code

    KEY_CODE_ESC = 27,        ///< Escape

    KEY_CODE_F1 = 257,        ///< F1
    KEY_CODE_F2,            ///< F2
    KEY_CODE_F3,            ///< F3
    KEY_CODE_F4,            ///< F4
    KEY_CODE_F5,            ///< F5
    KEY_CODE_F6,            ///< F6
    KEY_CODE_F7,            ///< F7
    KEY_CODE_F8,            ///< F8
    KEY_CODE_F9,            ///< F9
    KEY_CODE_F10,            ///< F10
    KEY_CODE_F11,            ///< F11
    KEY_CODE_F12,            ///< F12

    KEY_CODE_TAB = 9,        ///< Tabulator
    KEY_CODE_CAPSLOCK,        ///< TODO Caps lock
    KEY_CODE_BACKSPACE = 8,    ///< Backspace
    KEY_CODE_ENTER = 13,    ///< Enter/return
    KEY_CODE_LSHIFT,        ///< TODO Left shift
    KEY_CODE_RSHIFT,        ///< TODO Right shift
    KEY_CODE_LCTRL,            ///< TODO Left ctrl
    KEY_CODE_RCTRL,            ///< TODO Right ctrl
    KEY_CODE_LALT,            ///< TODO Left alt
    KEY_CODE_RALT,            ///< TODO Right alt
    KEY_CODE_SPACE = ' ',    ///< Space bar


    KEY_CODE_PAGEUP = 360,    ///< Page up (normal or numpad)
    KEY_CODE_PAGEDOWN,        ///< Page down (normal or numpad)
    KEY_CODE_HOME,            ///< Home (normal or numpad)
    KEY_CODE_END,            ///< End (normal or numpad)
    KEY_CODE_INSERT,        ///< Insert (normal or numpad)
    KEY_CODE_DELETE = 127,    ///< Delete (normal or numpad)

    KEY_CODE_LEFT = 356,    ///< Left (normal or numpad)
    KEY_CODE_UP,            ///< Up (normal or numpad)
    KEY_CODE_RIGHT,            ///< Right (normal or numpad)
    KEY_CODE_DOWN,            ///< Down (normal or numpad)
};

}
}

#endif // KEYCODE_H_
